#include <stdio.h>
#include <math.h>
//#define N 10

double mypow(double x,  int n)
{
	

	// 1. 通过递归实现
	if(n == 1)
		return x;
	else //(n > 1)
	{
		if(n % 2)
			return x*pow(x,n/2)*pow(x,n/2);
		else
			return pow(x,n/2)*pow(x,n/2);
	}

	// 2. 通过循环实现  -- not so natural
	// I quit^^   --> nono , I succeed!
	// double result = 1;
	// int count = 0;
	// while(n > 1)
	// {
	// 	if(n % 2)
	// 	{
	// 		for(int i = count; i >=0; i--)
	// 			result *= x;
	// 	}
	// 	count ++;	
	// 	n = n /2;
	// }

	// while(count--)
	// {
	// 	x*=x;
	// }
	// return result*x;
}

int main(void)
{
	double re = mypow(2.0, 9);
	printf("re = %lf.\n",re);
	return 0;
}
